<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Academico extends CI_Controller {

    /**
     * Controlador principal academico;
     */
    public function __construct() {
        parent::__construct();
        get_acesso();
    }

    public function get_cograde() {
        $sc_ctx = $this->session->userdata('contexto');
        $sc_user = $this->session->userdata('co_usuario');
        if (!empty($sc_user) and ! empty($sc_ctx)) {
            $this->load->model('Model_academico');
            $co_ctx = str_replace('/', '', $sc_ctx);
            $co_grade = $this->Model_academico->get_cograde($sc_user, $co_ctx);
            return $co_grade;
        }
    }

    public function grade() {
        $metodo = $this->uri->segment(3);
        switch ($metodo) {
            case 'montar':
                $this->montargrade();
                break;
            default:
                $this->montargrade();
                break;
        }
    }

    public function requerimento() {
        $metodo = $this->uri->segment(3);
        switch ($metodo) {
            case 'novo':
                $this->novorequerimento();
                break;
            case 'mostrar':
                $this->mostrarRequerimento($this->uri->segment(4));
                break;
            default:
                $this->listar();
                break;
        }
    }

    /* SECAO DE METODOS UTILIZADOS COMO CONTROLADORES DE GRADE */

    // Montagem de grade horaria
    public function montargrade() {
        $co_grade = $this->get_cograde();
        $arquivosJS = ['jquery', 'fancybox', 'jquery-ui', 'tooltipster', 'main', 'modernizr', 'timeline', 'grade'];
        $arquivosCSS = ['main', 'grade_print', 'fancybox', 'timeline', 'tooltipster'];
        if (empty($co_grade)) {
            $params = ["arquivosJS" => $arquivosJS, "arquivosCSS" => $arquivosCSS, "titulo" => "SONIC :: Grade horária",
                "m_ativo" => "academico", "sm_ativo" => "grade"];
            $this->load->view('header', $params);
            $this->load->view('aluno/menu_lateral');
            $this->load->view('aluno/sem_contexto');
        } else {
            $this->load->model('Model_academico');
            $this->load->helper(['timeline', 'grade']);
            $grade = $this->Model_academico->get_grade($co_grade);
            $stsGrade = expire_grade($grade);
            $data['gr_status'] = status_grade($stsGrade['status']);
            $data['tp_grade'] = $stsGrade['tipo'];
            $data['gr_atual'] = $stsGrade['atual'];
            $data['eventos'] = $this->Model_academico->get_evt_grade($co_grade);
            $data['dias'] = ['Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'];
            $params = ["arquivosJS" => $arquivosJS, "arquivosCSS" => $arquivosCSS, "titulo" => "SONIC :: Grade horária",
                "m_ativo" => "academico", "sm_ativo" => "grade"];
            $this->load->view('header', $params);
            $this->load->view('aluno/menu_lateral');
            $this->load->view('aluno/grade_horaria', $data);
        }
        $this->load->view('footer');
    }

    public function listarbd() {
        ajax_only();
        header('Content-Type: application/json');
        $grade = $this->get_cograde();
        $this->load->model('Model_academico');
        $bddcp = $this->Model_academico->get_dcp_bd($grade);
        $ldcp = [];
        foreach ($bddcp as $dcp) {
            $dia = ($dcp['st_turma_ead'] === 'S') ? 'grade_ead1' : 'grade_' . $dcp['CO_DIA'];
            $r = ["turma" => $dcp['CO_TURMA'], "disciplina" => $dcp['NO_DISCIPLINA'], "professor" => $dcp['NO_PROFESSOR'],
                "dia" => $dia];
            $ldcp[$dia . 'dcp' . $dcp['CO_TURMA']] = $r;
        }
        echo json_encode($ldcp);
    }

    public function listar_tmp() {
        $periodo = $this->input->get('prd');
        if (empty($periodo)) {
            $tmp = ['semestre' => '20151', 'matriz' => 43, 'curso' => 1];
            $this->load->model('Model_academico');
            $bddcp = $this->Model_academico->get_ls_periodo($tmp);
            $this->load->view('aluno/ajax/template', ['ls' => $bddcp]);
        } else {
            header('Content-Type: application/json');
            $tmp = ['periodo' => $periodo, 'semestre' => '20151', 'matriz' => 43, 'curso' => 1];
            $this->load->model('Model_academico');
            $bddcp = $this->Model_academico->get_tmp_periodo($tmp);
            echo json_encode($bddcp);
        }
    }

    public function salvargrade() {
        //ajax_only();
        $this->load->model('Model_academico');
        $this->load->helper(['array', 'evento']);
        $aluno = $this->session->userdata('co_usuario');
        $contexto = str_replace("/", "", $this->session->userdata('contexto'));
        $co_grade = $this->Model_academico->get_cograde($aluno, $contexto);
        $ag = $this->Model_academico->get_grade($co_grade);
        $grade = $ag;
        $tr_get = array_filter($this->input->get());
        $turmas_new = array_filter(explode(',', implode(',', $tr_get)));
        if (count($turmas_new) == 0) {
            $erro = ['texto' => 'Sua grade não foi enviada por estar vazia, por favor preencha com ao menos uma turma!',
                'tipo' => 'error'];
            echo json_encode($erro);
            exit;
        }
        $turmas = $this->Model_academico->get_turmas_aluno($co_grade);
        $turmas_old = array();
        foreach ($turmas as $tr) {
            array_push($turmas_old, $tr['CO_TURMA']);
        }
        $incluir = array_diff($turmas_new, $turmas_old);
        $remover = array_diff($turmas_old, $turmas_new);
        $inc = array();
        $rmv = array();
        $updt = 0;
        foreach ($turmas_new as $upd) {
            if (in_array($upd, $turmas_old)) {
                $ead = (isset($tr_get['ihead'])) ? explode(',', $tr_get['ihead']) : [];
                $tp_turma = (in_array($upd, $ead)) ? 'S' : 'N';
                $set = ['st_turma_ead' => $tp_turma];
                $nupd = $this->Model_academico->ajusta_turmas_aluno($co_grade, $upd, $set);
                $updt += $nupd;
            }
        }
        foreach ($incluir as $dcpi) {
            $ead = (isset($tr_get['ihead'])) ? explode(',', $tr_get['ihead']) : array();
            $tp_turma = (in_array($dcpi, $ead)) ? 'S' : 'N';
            $d = array('co_turma' => $dcpi, 'co_grade' => $co_grade, 'st_turma_ead' => $tp_turma);
            array_push($inc, $d);
        }
        if (count($inc)) {
            $this->Model_academico->set_turmas_aluno($inc);
        }
        foreach ($remover as $rm) {
            $rmd = array('turma' => $rm, 'grade' => $co_grade);
            array_push($rmv, $rmd);
        }
        if (count($rmv)) {
            $this->Model_academico->remove_turmas_aluno($rmv);
        }
        $changes = count($inc) + count($rmv) + $updt;
        $jmsg = array();
        if ($changes > 0) {
            if ($grade['ST_STATUS_GRADE'] === 'N') {
                $this->load->helper('evento');
                $sbm = get_evt('sbm_msg', $grade['CO_GRADE']);
                $dic = get_evt('dic_msg', $grade['CO_GRADE']);
                $evt = [$sbm, $dic];
                $t = $this->Model_academico->set_evt_grade($evt);
                $jmsg['evento'] = $t;
            }
            if ($grade['ST_STATUS_GRADE'] === 'R') {
                $this->load->helper('evento');
                $sbm = get_evt('sbm_msg', $grade['CO_GRADE']);
                $evt = [$sbm];
                $t = $this->Model_academico->set_evt_grade($evt);
                $jmsg['evento'] = $t;
            }
            $jmsg['texto'] = 'Sua grade foi salva com sucesso!';
            $jmsg['tipo'] = 'success';
        } else {
            $jmsg['texto'] = 'Nada foi alterado.';
            $jmsg['tipo'] = 'warning';
        }
        echo json_encode($jmsg);
    }

    public function listardcp() {
        $this->load->model('Model_academico');
        $co_dia = $this->input->get('dia');
        $arr_not = explode(',', $this->input->get('not'));
        $turmas = $this->Model_academico->get_disciplinas($co_dia, $arr_not);
        if (count($turmas) > 0) {
            echo '<ul>';
            foreach ($turmas as $turma) {
                echo '<li><a href="./academico/mostrarturma?turma=' . $turma->CO_TURMA . '">'
                . '<span class="no-dcp">' . $turma->NO_DISCIPLINA . '</span>'
                . '<span class="professor">' . $turma->NO_PROFESSOR . '</span>'
                . '<span class="periodo">' . $turma->NU_PERIODO_TURMA . '&ordm;</span>'
                . '</a></li>';
            }
            echo '</ul>';
        } else {
            echo '<p>&nbsp;</p><center>Nenhuma disciplina disponível para este dia '
            . '<br />Para maiores informações entre em contato com o coordenador do seu curso.</center>';
        }
    }

    public function mostrarTurma() {
        ajax_only();
        $this->load->model('Model_academico');
        $td = $this->input->get('turma');
        $turma = $this->Model_academico->get_turma($td);
        $param = Array();
        $param['turma'] = $turma[0];
        $this->load->view('aluno/ajax/turma-detail', $param);
    }

    public function enviarMsg() {
        ajax_only();
        $getMsg = $this->input->get('ds_msg');
        if (!empty($getMsg)) {
            $co_aluno = $this->session->userdata('co_usuario');
            $co_grade = $this->get_cograde();
            $this->load->helper('texto');
            $ds_msg = strip_tags($this->input->get('ds_msg'), '<b><i><br>');
            $msg_tratada = termo_proibido($ds_msg);
            $msg_alu = ['CO_REMETENTE' => $co_aluno, 'TP_EVENTO' => 'alu-msg', 'DS_EVENTO' => $msg_tratada];
            $this->load->model('Model_academico');
            echo $this->Model_academico->send_msg_grade($msg_alu, $co_grade);
        } else {
            $this->load->view('aluno/ajax/enviar-msg');
        }
    }

    public function alterarMsg() {
        ajax_only();
        $op = $this->input->get('op');
        $this->load->model('Model_academico');
        $this->load->helper('texto');
        $id = $this->input->get('id');
        if ($op === 'remove' and ! empty($id)) {
            echo $this->Model_academico->edit_msg_grade('remove', $id);
        }
        if ($op === 'edit' and ! empty($id)) {
            $msgGET = $this->input->get('msg');
            $msg = strip_tags($msgGET, '<b><i><br>');
            $msg_tratada = termo_proibido($msg);
            $this->Model_academico->edit_msg_grade('edit', $id, $msg_tratada);
            echo $msg_tratada;
        }
        if ($op === 'read' and ! empty($id)) {
            echo $this->Model_academico->edit_msg_grade('read', $id);
        }
    }

    /* SECAO DE METODOS UTILIZADOS COMO CONTROLADORES DE REQUERIMENTOS */

    public function listar() {
        $this->load->model('Model_academico');
        $this->load->helper('rqr');
        $arquivosJS = array('jquery', 'dataTables', 'main', 'tooltipster', 'requerimento');
        $arquivosCSS = array('main', 'dataTables', 'tooltipster', 'requerimento');
        $usuario = $this->session->userdata('co_usuario');
        $data = ['rqs' => $this->Model_academico->listarRq($usuario)];
        $params = array("arquivosJS" => $arquivosJS,
            "arquivosCSS" => $arquivosCSS,
            "titulo" => "SONIC :: Requerimentos",
            "m_ativo" => "academico",
            "sm_ativo" => "requerimento");
        $this->load->view('header', $params);
        $this->load->view('aluno/menu_lateral');
        $this->load->view('aluno/lista_req', $data);
        $this->load->view('footer');
    }

    public function novorequerimento() {
        $this->load->model('Model_academico');
        $arquivosJS = array('jquery', 'main', 'modernizr', 'redactor', 'pt_br', 'n_req');
        $arquivosCSS = array('main', 'redactor', 'redactor-blue', 'requerimento');
        $params = array("arquivosJS" => $arquivosJS,
            "arquivosCSS" => $arquivosCSS,
            "titulo" => "SONIC :: Novo requerimento",
            "m_ativo" => "academico",
            "sm_ativo" => "requerimento");
        $this->load->view('header', $params);
        $this->load->view('aluno/menu_lateral');
        $this->load->view('aluno/novo_req');
        $this->load->view('footer');
    }

    public function criarRequerimento() {
        $this->load->model('Model_academico');
        $co_aluno = $this->session->userdata('co_usuario');
        $coordenador = $this->Model_academico->getCoordenador($co_aluno);
        $categoria = $this->input->post('tp_requerimento');
        $assunto = $this->input->post('no_requerimento');
        $mensagem = $this->input->post('ds_requerimento');
        if (empty($categoria) || empty($assunto) || empty($mensagem)) {
            echo 0;
            return false;
        }
        $this->load->helper('texto');
        $ds_rq = strip_tags($mensagem, '<b><i><p><div><br><bloquote><strike><ul><ol><li><a><hr><h1><h2><h3><h4><h5><h6>');
        $rq_tratado = termo_proibido($ds_rq);
        $dataRq = ['CO_USUARIO' => $co_aluno, 'CO_COORDENADOR' => $coordenador, 'CO_CATEGORIA' => $categoria,
            'NO_REQUERIMENTO' => $assunto, 'DS_MENSAGEM' => $rq_tratado];
        $insMsg = $this->Model_academico->insereRq($dataRq);
        if ($insMsg) {
            echo 1;
            return true;
        } else {
            echo 2;
            return false;
        }
    }

    public function mostrarRequerimento($rqr) {
        $this->load->model('Model_academico');
        $details = $this->Model_academico->mostrarRq($rqr);
        $RQRdata = ['details' => $details[0]];
        $arquivosJS = array('jquery', 'main', 'timeline');
        $arquivosCSS = array('main', 'timeline', 'requerimento');
        $params = array("arquivosJS" => $arquivosJS,
            "arquivosCSS" => $arquivosCSS,
            "titulo" => "SONIC :: Mostrar requerimento",
            "m_ativo" => "academico",
            "sm_ativo" => "requerimento");
        $this->load->view('header', $params);
        $this->load->view('aluno/menu_lateral');
        $this->load->view('aluno/mostra_req', $RQRdata);
        $this->load->view('footer');
    }

}

/* End of file academico.php */
/* Location: ./application/controllers/academico.php */